﻿using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using UniMana.Utils.Data;
using DevExpress.XtraLayout;
using DevExpress.XtraBars;
using UniMana.Data;
using UniMana.Utils.Helper;


namespace UniMana.Win.Training
{
    public partial class FrmStudent_SubInfo : DevExpress.XtraEditors.XtraForm
    {
        DBMain m_data = new DBMain();
        public Training_StudentInfo m_StudentInfo = new Training_StudentInfo();
        public Training_Student_CheckListInfo m_CheckListInfo = new Training_Student_CheckListInfo();
        public Training_Student_ClassInfo m_StudentClass = new Training_Student_ClassInfo();
        public Training_Student_InputInfo m_StudentInput = new Training_Student_InputInfo();

        private string m_Rule = UniMana.Utils.Configs.RuleConfig.STUDENTINFO;

        public bool m_Flag = true; //An!!!
        public bool m_Add = false; //Nút thêm mới được enable = false. 

        #region [Properties]
        public int LevelKey;
        public int TrainingTypeKey;
        public int CourseKey;
        public int DepartmentKey;
        public int MajorKey;
        public int StatusKey;
        
        #endregion


        public FrmStudent_SubInfo()
        {
            if (!SysUtils.CheckAccessByRule(m_Rule))
            {
                return;
            }
            InitializeComponent();
            SysUtils.SetRuleControl(this.Controls, this.Name);
            SysUtils.SetRuleToXucBar(xucBar1, this.m_Rule);
        }


        #region [Utils]

        /// <summary>
        /// Nạp dữ liệu
        /// </summary>
        public void LoadData()
        {
            #region [Drop-down]
            lueCatalogue_Level.GetData(m_data.m_DCReadOnly.Catalogue_Levels);
            lueCatalogue_TrainingType.GetData(m_data.m_DCReadOnly.Catalogue_TrainingTypes);
            lueCatalogue_Course.GetData(m_data.m_DCReadOnly.Catalogue_Courses);
            lueCatalogue_DepartmentNB.GetData(m_data.m_DCReadOnly.Catalogue_Departments.Where(p => p.StudentManage == true),"Catalogue_DepartmentKey");
            lueCatalogue_Status.GetData(m_data.m_DCReadOnly.Catalogue_Status);
            gluCatalogue_Major.GetData(m_data.m_DCReadOnly.Catalogue_Majors,"Catalogue_MajorKey");

            lueCatalogue_Nation.GetData(m_data.m_DCReadOnly.Catalogue_Nations);
            lueCatalogue_City.GetData(m_data.m_DCReadOnly.Catalogue_Cities);
            lueCatalogue_District.GetData(m_data.m_DCReadOnly.Catalogue_Districts);
            lueCatalogue_Ethnic.GetData(m_data.m_DCReadOnly.Catalogue_Ethnics);
            lueCatalogue_Religion.GetData(m_data.m_DCReadOnly.Catalogue_Religions);
            lueCatalogue_Politics.GetData(m_data.m_DCReadOnly.Catalogue_Politics);

            lueTraining_Class.GetData(m_data.m_DCReadOnly.Training_Classes);
            #endregion
           
            LoadBindingSoureToLcg();
            this.PannelCommonInfoEnable(false);
        }

        /// <summary>
        /// LoadOnceRecord
        /// </summary>
        public void LoadBindingSoureToLcg()
        {
            lcgPersonalInfo.LoadOneRecord(m_StudentInfo.m_bds);
            lcgContactInfo.LoadOneRecord(m_StudentInfo.m_bds);
            lcgFamilyInfo.LoadOneRecord(m_StudentInfo.m_bds);
            lcgOfficeInfo.LoadOneRecord(m_StudentInfo.m_bds);
            lcgNote.LoadOneRecord(m_StudentInfo.m_bds);

            lcgCheckList.LoadOneRecord(m_CheckListInfo.m_bds);
            lcgStudentClass.LoadOneRecord(m_StudentClass.m_bds);

            lcgInputInfo.LoadOneRecord(m_StudentInput.m_bds);
            

            string dataMember = "ID";
            txtIDNB.DataBindings.Clear();
            txtIDNB.DataBindings.Add(new Binding("Text", m_StudentClass.m_bds, dataMember, true));

            //Giới tính
            if ((m_StudentInfo.m_bds.Current as Training_Student).Gender == false)
            {
                ckeMale.Checked = true;
                ckeFemale.Checked = false;
            }
            else
            {
                ckeFemale.Checked = true;
                ckeMale.Checked = false;
            }
        }

        /// <summary>
        /// Lưu thông tin
        /// </summary>
        public void SaveAll()
        {
            //if (grpCommon.Enabled == true) grpCommon.Enabled = false;
            this.PannelCommonInfoEnable(false);
            //Lưu
            this.Validate();

            //Giới tính
            if (ckeMale.Checked)
            {
                (m_StudentInfo.m_bds.Current as Training_Student).Gender = false; //Nam
            }
            else
            {
                (m_StudentInfo.m_bds.Current as Training_Student).Gender = true; //Nữ 
            }
            if (this.txtExceptionBirthday.Text != "")
            {
                m_StudentInfo.Properties.Birthday = null;
            }
            else
            {
                m_StudentInfo.Properties.ExceptionBirthday = null;
            }

            try
            {
                if (m_StudentInfo.Properties.CreatedBy == null)
                {
                    m_StudentInfo.Properties.CreatedBy = SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey;
                }
                if (m_StudentInfo.Properties.CreatedOn == null)
                {
                    m_StudentInfo.Properties.CreatedOn = DateTime.Now;
                }
                m_StudentInfo.Properties.ModifiedBy = SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey;
                m_StudentInfo.Properties.ModifiedOn = DateTime.Now;
            }
            catch { }

            m_StudentInfo.Save();
            m_StudentClass.Save();
            m_CheckListInfo.Save();
            m_StudentInput.Save();
        }

        /// <summary>
        /// Lấy thông tin các lookupEdit
        /// </summary>
        public void GetCurrentRef()
        {
            this.LevelKey = lueCatalogue_Level.GetIntValue();
            this.TrainingTypeKey = lueCatalogue_TrainingType.GetIntValue();
            this.CourseKey = lueCatalogue_Course.GetIntValue();
            this.DepartmentKey = lueCatalogue_DepartmentNB.GetIntValue();
            this.MajorKey = gluCatalogue_Major.GetIntValue();
            this.StatusKey = lueCatalogue_Status.GetIntValue();

            try
            {
                //Nếu chưa tạo được người tạo thì lấy user và thời gian tạo thêm vào
                if (m_StudentInfo.Properties.CreatedBy == null)
                {
                    m_StudentInfo.Properties.CreatedBy = SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey;
                }
                if (m_StudentInfo.Properties.CreatedOn == null)
                {
                    m_StudentInfo.Properties.CreatedOn = DateTime.Now;
                }


                //Cập nhật thông tin người chỉnh sửa, và lần chỉnh sửa sau cùng
                m_StudentInfo.Properties.ModifiedBy = SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey;
                m_StudentInfo.Properties.ModifiedOn = DateTime.Now;
            }
            catch { }
        }
        #endregion

        #region [XucBar - Events]

        /// <summary>
        /// Nút Lưu và thêm mới
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_AddNew_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckSaveByRule(this.m_Rule))
            {
                return;
            }

            if (dvpStudent.Validate())
            {
                try
                {
                    if (this.dteBirthday.DateTime != null && this.txtExceptionBirthday.Text != "")
                    {
                        if (DialogResult.OK != XtraMessageBox.Show("Cả 2 ô ngày sinh và ngày sinh ngoại lệ đều tồn tại. Bạn chỉ được chọn một trong 2. Ô ngày sinh ngoại lệ sẽ được chọn?", "Kiểm tra", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                        {
                            return;
                        }
                    }
                    this.GetCurrentRef(); //Lấy thông tin hiện tại
                    this.SaveAll();

                    Guid newKey = Guid.NewGuid();
                    m_StudentInfo = new Training_StudentInfo(newKey.ToString());
                    m_CheckListInfo = new Training_Student_CheckListInfo(newKey.ToString());
                    m_StudentClass = new Training_Student_ClassInfo("nguyen.huu",newKey.ToString(), this.MajorKey);
                    m_StudentInput = new Training_Student_InputInfo(newKey.ToString());

                    try
                    {
                        m_StudentInfo.Properties.Catalogue_NationKey = 12; //VietNam
                        m_StudentInfo.Properties.Catalogue_CityKey = 39; //Long An
                        m_StudentInfo.Properties.Catalogue_EthnicKey = 1; //Kinh
                        m_StudentInfo.Properties.Catalogue_ReligionKey = 5; //Khong
                        m_StudentInfo.Properties.Catalogue_PoliticsKey = 1; //Doan

                        //Người tạo/Ngày tạo
                        m_StudentInfo.Properties.CreatedBy = SysGlobalVar.g_sta_sysUserLogin.Properties.Personnel_PersonnelKey;
                        m_StudentInfo.Properties.CreatedOn = DateTime.Now;
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }

                    LoadBindingSoureToLcg();

                    //Reset checkEdits
                    foreach (LayoutControlItem item in lcgCheckList.Items)
                    {
                        if (item.Control is CheckEdit)
                        {
                            ((CheckEdit)(item.Control)).Checked = false;
                        }
                    }

                    lueCatalogue_Level.EditValue = this.LevelKey;
                    lueCatalogue_DepartmentNB.EditValue = this.DepartmentKey;
                    lueCatalogue_TrainingType.EditValue = this.TrainingTypeKey;
                    lueCatalogue_Course.EditValue = this.CourseKey;
                    lueCatalogue_Status.EditValue = this.StatusKey;
                    m_StudentClass.m_bds.EndEdit();

                    this.PannelCommonInfoEnable(true);
                    EnabledGroups(true);
                }
                catch {  }
            }
        }

        /// <summary>
        /// Lưu và đóng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Close_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckSaveByRule(this.m_Rule))
            {
                return;
            }
            if (dvpStudent.Validate())
            {
                if (this.dteBirthday.DateTime != null && this.txtExceptionBirthday.Text != "")
                {
                    if (DialogResult.Yes != XtraMessageBox.Show("Cả 2 ô ngày sinh và ngày sinh ngoại lệ đều tồn tại. Bạn chỉ được chọn một trong 2. Ô ngày sinh ngoại lệ sẽ được chọn?", "Kiểm tra", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                    {
                        return;
                    }
                }
                this.SaveAll();
                this.Close();
            }
        }

        private void btnEdit_Click(object sender, ItemClickEventArgs e)
        {
            if (!SysUtils.CheckEditByRule(this.m_Rule))
            {
                return;
            }
            EnabledGroups(true);
            this.PannelCommonInfoEnable(false);
        }

        public void PannelCommonInfoEnable(bool state)
        {
            foreach (LayoutControlItem item in lcgStudentClass.Items)
            {
                item.Control.Enabled = state;
            }
            lueCatalogue_Status.Enabled = true;
            lueTraining_Class.Enabled = false;
        }

        public void EnabledGroups(bool state)
        {
            this.EnabledEditor(lcgCheckList, state);
            this.EnabledEditor(lcgContactInfo, state);
            this.EnabledEditor(lcgInputInfo, state);
            this.EnabledEditor(lcgNote, state);
            this.EnabledEditor(lcgOfficeInfo, state);
            this.EnabledEditor(lcgPersonalInfo, state);
            this.EnabledEditor(lcgStudentClass,state);
            this.EnabledEditor(lcgFamilyInfo, state);

            lueCatalogue_Status.Enabled = state;
            lueTraining_Class.Enabled = false;

        }

        public void EnabledEditor(LayoutControlGroup ctr, bool state)
        {
            foreach (LayoutControlItem c in ctr.Items)
            {
                c.Control.Enabled = state;
            }
        }

        #endregion

        #region [Form - Events]

        /// <summary>
        /// Form Load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmStudent_Info_Load(object sender, EventArgs e)
        {
            LoadData();
            if (m_Add == true)
            {
                this.PannelCommonInfoEnable(true);
                this.EnabledGroups(true);
                m_Add = false;
                return;
            }

            if (m_Flag==false)
            {
                xucBar1.Enabled = false;
            }
            this.EnabledGroups(false);
            
        }

        /// <summary>
        /// PictureEdit được Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ptePicture_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog odg = new OpenFileDialog();
                odg.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg";
                odg.ShowDialog(this);
                string imageFile = odg.FileName;

                if (imageFile != string.Empty)
                {
                    Image img = Image.FromFile(imageFile);

                    ptePicture.Image = Image.FromFile(imageFile);
                    img = img.GetThumbnailImage(240, 480, null, new System.IntPtr());
                    ptePicture.Image = img;
                    m_StudentInfo.m_bds.EndEdit();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        /// <summary>
        /// Chọn hết ở group hồ sơ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ckeCheckAllNB_CheckedChanged(object sender, EventArgs e)
        {
            foreach (LayoutControlItem lci in lcgCheckList.Items)
            {
                if (lci.Control is CheckEdit)
                {
                    ((CheckEdit)lci.Control).Checked = ckeCheckAllNB.Checked;
                }
            }
        }

        /// <summary>
        /// Ngành thay đổi thì lấy tên đơn vị quản lý tương ứng
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lueCatalogue_Major_EditValueChanged(object sender, EventArgs e)
        {
            #region [Ràng buộc]
            try
            {
                var item = m_data.m_DCReadOnly.Catalogue_Majors.Where(p => p.Catalogue_MajorKey == gluCatalogue_Major.GetIntValue()).FirstOrDefault();
                lueCatalogue_Level.EditValue = item.Catalogue_LevelKey;  //Bậc đổi
                lueCatalogue_DepartmentNB.EditValue = item.Catalogue_DepartmentKey; //Đơn vị đổi
            }
            catch { }
            #endregion
        }


        //Tỉnh đổi, quận/huyện đổi theo
        private void lueCatalogue_City_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                lueCatalogue_District.GetData(m_data.m_DCSave.Catalogue_Districts.Where(p => p.Catalogue_CityKey == lueCatalogue_City.GetIntValue()));
            }
            catch { }
        }


        //Thay đỏi ngành
        private void lueCatalogue_DepartmentNB_EditValueChanged(object sender, EventArgs e)
        {
            #region [Ràng buộc]

            try
            {
                if (gluCatalogue_Major.EditValue == null) lueCatalogue_Level.EditValue = null;
                gluCatalogue_Major.GetData(m_data.m_DCReadOnly.Catalogue_Majors.Where(p => p.Catalogue_DepartmentKey ==
                                                                                           lueCatalogue_DepartmentNB.GetIntValue())
                                                                                      );
            }
            catch { }
            #endregion
        }

        private void lueCatalogue_Level_EditValueChanged(object sender, EventArgs e)
        {
            #region [Ràng buộc]
            //Thay đổi ngành theo bậc tương ứng
            int iLevel = lueCatalogue_Level.GetIntValue();

            if (iLevel != -1)
            {
                var majorSource = m_data.m_DCReadOnly.Catalogue_Majors.Where(p => p.Catalogue_LevelKey == iLevel);
                if (lueCatalogue_DepartmentNB.GetIntValue() != -1)
                {
                    majorSource = majorSource.Where(p => p.Catalogue_DepartmentKey == lueCatalogue_DepartmentNB.GetIntValue());
                }
                gluCatalogue_Major.GetData(majorSource);
            }
            else   //Nếu bậc đào tạo là null thì lấy hết danh sách ngành tương ứng với đơn vị quản lý
            {
                //lueCatalogue_Department_EditValueChanged_1(sender, e);
            }
            if (gluCatalogue_Major.Text == string.Empty) gluCatalogue_Major.EditValue = null;
            #endregion
        }
        #endregion


    }
}